package com.dfire.mtm.task;

import com.dfire.mtm.constant.TaskLife;
import com.dfire.mtm.taskNode.TaskNode;

import java.util.List;
import java.util.Set;

/**
 * 描述:
 * 任务
 *
 * @author sutang
 * @create 2018-10-23 下午6:30
 */
public interface TaskManager {

    /**
     * 获取任务名称
     * @return
     */
    String getName();

    /**
     * 启动任务
     */
    void start();

    /**
     * 安全关闭任务
     */
    void stop();

    /**
     * 获取流水线下所有任务节点
     * @return
     */
    Set<TaskNode> getAllTaskNode();

    /**
     * 开始生产，异步
     * @param task
     * @param data
     * @param <T>
     */
    <T> void produce(String task, T data) throws InterruptedException;

    /**
     * 任务是否完成
     * @return
     */
    boolean isFinish(String task);

    /**
     * 是否可用
     * @return
     */
    boolean isEnable();

    /**
     * 告知task任务已经完成
     * @param task
     * @return
     */
    boolean notifyTaskFinish(String task);
}
